package com.tjsinfo.tjsoa.Dao;

import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.PreparedStatementCallback;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;

import com.tjsinfo.tjsoa.common.PaginationSupport;

public interface ISpringDao {

	/**
	 * @通用查询,根据SQL返回需要的结果集
	 * @param sql
	 *            要查询的SQL语句
	 * @param columns
	 *            要返回的列名
	 * @return com.tjsinfo.tjsoa.common.PagenatedSql
	 */
	public List<Map<String, String>> commonSelect(String[] columns, String sql);

	/**
	 * @根据带有参数的SQL以及要查询的单页记录数和页码生成sql语句
	 * @param sql
	 *            要查询的SQL语句
	 * @param columns
	 *            要返回的列明
	 * @param pageSize
	 *            每页的记录数
	 * @param startIndex
	 *            要查询的其实位置
	 * @param totalCount
	 *            结果集的总数
	 * @return com.tjsinfo.tjsoa.common.PagenatedSql
	 */
	public PaginationSupport buildSQLResultSet(String sql, String columns[],
			int pageSize, int startIndex, int totalCount);

	/**
	 * @根据带有参数的SQL以及要查询的单页记录数和页码生成sql语句
	 * @param sql
	 *            要查询的SQL语句
	 * @param columns
	 *            要返回的列明
	 * @param pageSize
	 *            每页的记录数
	 * @param startIndex
	 *            要查询的其实位置
	 * @param totalCount
	 *            结果集的总数
	 * @param id
	 *            主键
	 * @return com.tjsinfo.tjsoa.common.PagenatedSql
	 */
	public PaginationSupport buildSQLResultSet(String sql, String columns[],
			String id, int pageSize, int startIndex, int totalCount);

	public void commonUpdate(String sql, Object obj[]);
	
	/**
	 * 根据SQL语句查询结果
	 * @param sql sql语句
	 * @param parameterizedRowMapper 对象映射器
	 * @param paramerterArray 参数数组
	 * @return 结果集
	 */
	public List selectSQLQuery(String sql,ParameterizedRowMapper parameterizedRowMapper,Object[] paramerterArray);
	
	/**
	 * 执行SQL语句
	 * @param sql SQL语句
	 * @param pss 回调函数
	 * @return 是否成功
	 */
	public Boolean runningSql(String sql,PreparedStatementSetter pss);
	
	/**
	 * 执行SQL语句
	 * @param sql SQL语句	
	 * @return 是否成功
	 */
	public Boolean runningSql(String sql);
	
	/**
	 * 执行查询SQL语句
	 * @param sql sql语句
	 * @param objects 参数
	 * @param rowMapper 映射器
	 */
	public List querySQL(String sql,Object[] objects,RowMapper rowMapper);

}